package br.uff.es2.xadrez.core;

public class Pawn extends Piece {

    private boolean unPassant;

    public Pawn(Color color, String imageFilePath) {
        this.color = color;
        this.imageFilePath = imageFilePath;
        this.moved = false;
        this.value = 1;
    }

    @Override
    public int[][] getAvaiableMoves(int[] posicao, Piece[][] board) {
        int[][] availableMoves = new int[8][8];
        if (getColor().equals(Color.WHITE)) {
            if (posicao[0] - 1 >= 0) {
                if (board[posicao[0] - 1][posicao[1]] == null) {
                    availableMoves[posicao[0] - 1][posicao[1]] = 1;
                    if (posicao[0] - 1 == 0) {
                        availableMoves[posicao[0] - 1][posicao[1]] = 4;
                    }
                    if (!isMoved() && board[posicao[0] - 2][posicao[1]] == null) {
                        availableMoves[posicao[0] - 2][posicao[1]] = 1;
                        int pos[] = {posicao[0] - 2, posicao[1]};
                        Board.unpassant.setEnPassantPossible(true);
                        Board.unpassant.setPosicao(pos);
                        Board.unpassant.setColor(Color.WHITE);
                    }
                }
                if (posicao[1] - 1 >= 0) {
                    if (board[posicao[0] - 1][posicao[1] - 1] != null) {
                        if (board[posicao[0] - 1][posicao[1] - 1].getColor() != getColor()) {
                            availableMoves[posicao[0] - 1][posicao[1] - 1] = 1;
                            if (posicao[0] - 1 == 0) {
                                availableMoves[posicao[0] - 1][posicao[1] - 1] = 4;
                            }
                        }
//                    } else if (Board.unpassant.isUnPassantAEsquerda()) {
//                        availableMoves[posicao[0] - 1][posicao[1] - 1] = 2;
//                        Board.unpassant.setUnPassantAEsquerda(false);
                    }
                }
                if (posicao[1] + 1 < 8) {
                    if (board[posicao[0] - 1][posicao[1] + 1] != null) {
                        if (board[posicao[0] - 1][posicao[1] + 1].getColor() != getColor()) {
                            availableMoves[posicao[0] - 1][posicao[1] + 1] = 1;
                            if (posicao[0] - 1 == 0) {
                                availableMoves[posicao[0] - 1][posicao[1] + 1] = 4;
                            }
                        }
//                    } else if (Board.unpassant.isUnPassantADireita()) {
//                        availableMoves[posicao[0] - 1][posicao[1] + 1] = 2;
//                        Board.unpassant.setUnPassantADireita(false);
                    }
                }
            }
            if (Board.unpassant.isEnPassantPossible()) {
                if ((posicao[1] - Board.unpassant.getPosicao()[1] == -1) || (posicao[1] - Board.unpassant.getPosicao()[1] == 1)) {
                    availableMoves[Board.unpassant.getPosicao()[0] - 1][Board.unpassant.getPosicao()[1]] = 2;
                }
            }
//            if (posicao[0] - 2 >= 0) {
//                if (posicao[1] + 1 < 8) {
//                    if (board[posicao[0] - 2][posicao[1] + 1] != null) {
//                        if (board[posicao[0] - 2][posicao[1] + 1].getColor() == Color.BLACK) {
//                            int pos[] = {posicao[0] - 2, posicao[1]};
//                            Board.unpassant.setPosicao(pos);
//                            Board.unpassant.setUnPassantADireita(true);
//                        }
//                    }
//                }
//                if (posicao[1] - 1 >= 0) {
//                    if (board[posicao[0] - 2][posicao[1] - 1] != null) {
//                        if (board[posicao[0] - 2][posicao[1] - 1].getColor() == Color.BLACK) {
//                            int pos[] = {posicao[0] - 2, posicao[1]};
//                            Board.unpassant.setPosicao(pos);
//                            Board.unpassant.setUnPassantAEsquerda(true);
//                        }
//                    }
//                }
//            }
        } else {
            if (posicao[0] + 1 < 8) {
                if (board[posicao[0] + 1][posicao[1]] == null) {
                    availableMoves[posicao[0] + 1][posicao[1]] = 1;
                    if (posicao[0] + 1 == 7) {
                        availableMoves[posicao[0] + 1][posicao[1]] = 4;
                    }
                    if (!isMoved() && board[posicao[0] + 2][posicao[1]] == null) {
                        availableMoves[posicao[0] + 2][posicao[1]] = 1;
                        int pos[] = {posicao[0] + 2, posicao[1]};
                        Board.unpassant.setEnPassantPossible(true);
                        Board.unpassant.setPosicao(pos);
                        Board.unpassant.setColor(Color.BLACK);
                    }
                }
                if (posicao[1] - 1 >= 0) {
                    if (board[posicao[0] + 1][posicao[1] - 1] != null) {
                        if (board[posicao[0] + 1][posicao[1] - 1].getColor() != getColor()) {
                            availableMoves[posicao[0] + 1][posicao[1] - 1] = 1;
                            if (posicao[0] + 1 == 7) {
                                availableMoves[posicao[0] + 1][posicao[1] - 1] = 4;
                            }
                        }
//                        } else if (Board.unpassant.isUnPassantAEsquerda()) {
//                            availableMoves[posicao[0] + 1][posicao[1] - 1] = 2;
//                            Board.unpassant.setUnPassantADireita(false);
                    }
                }
                if (posicao[1] + 1 < 8) {
                    if (board[posicao[0] + 1][posicao[1] + 1] != null) {
                        if (board[posicao[0] + 1][posicao[1] + 1].getColor() != getColor()) {
                            availableMoves[posicao[0] + 1][posicao[1] + 1] = 1;
                            if (posicao[0] + 1 == 7) {
                                availableMoves[posicao[0] + 1][posicao[1] + 1] = 4;
                            }
                        }
//                        } else if (Board.unpassant.isUnPassantADireita()) {
//                            availableMoves[posicao[0] + 1][posicao[1] + 1] = 2;
//                            Board.unpassant.setUnPassantADireita(false);
                    }
                }
            }
            if (Board.unpassant.isEnPassantPossible()) {
                if ((posicao[1] - Board.unpassant.getPosicao()[1] == -1) || (posicao[1] - Board.unpassant.getPosicao()[1] == 1)) {
                    availableMoves[Board.unpassant.getPosicao()[0] + 1][Board.unpassant.getPosicao()[1]] = 2;
                }
            }
            //verificacao dos movimentos para o un passant das
//            if (posicao[0] + 2 < 8) {
//                if (posicao[1] + 1 < 8) {
//                    if (board[posicao[0] + 2][posicao[1] + 1] != null) {
//                        if (board[posicao[0] + 2][posicao[1] + 1].getColor() == Color.WHITE) {
//                            int pos[] = {posicao[0] + 2, posicao[1]};
//                            Board.unpassant.setPosicao(pos);
//                            Board.unpassant.setUnPassantAEsquerda(true);
//                        }
//                    }
//                }
//                if (posicao[1] - 1 >= 0) {
//                    if (board[posicao[0] + 2][posicao[1] - 1] != null) {
//                        if (board[posicao[0] + 2][posicao[1] - 1].getColor() == Color.WHITE) {
//                            int pos[] = {posicao[0] + 2, posicao[1]};
//                            Board.unpassant.setPosicao(pos);
//                            Board.unpassant.setUnPassantADireita(true);
//                        }
//                    }
//                }
//            }
        }
        return availableMoves;
    }

    public int[][] getCaptureMoves(int[] posicao, Piece[][] board) {
        int[][] captureMoves = new int[8][8];
        if (getColor().equals(Color.WHITE)) {
            if (posicao[0]-1 >= 0) {
                if (posicao[1]-1 >= 0) {
                    captureMoves[posicao[0]-1][posicao[1]-1] = 1;
                }
                if (posicao[1]+1 < 8) {
                    captureMoves[posicao[0]-1][posicao[1]+1] = 1;
                }
            }
        } else {
            if (posicao[0]+1 < 8) {
                if (posicao[1]-1 >= 0) {
                    captureMoves[posicao[0]+1][posicao[1]-1] = 1;
                }
                if (posicao[1]+1 < 8) {
                    captureMoves[posicao[0]+1][posicao[1]+1] = 1;
                }
            }
        }
        return captureMoves;
    }
}
